package com.thank.concurrency.samples.syncContainer;

import lombok.extern.slf4j.Slf4j;

import java.util.Iterator;
import java.util.List;
import java.util.Vector;

/**
 * 演示集合使用不当造成错误的情况
 */
@Slf4j
public class VectorExample3 {

    private static void test1(Vector<Integer> vector) {
        // foreach方式
        for (Integer i : vector) {
            if (i.equals(3)) {
                vector.remove(i);
            }
        }
    }

    private static void test2(Vector<Integer> vector) {
        // iterator方式
        Iterator<Integer> iterator = vector.iterator();
        while (iterator.hasNext()) {
            Integer i = iterator.next();
            if (i.equals(3)) {
                vector.remove(i);
            }
        }
    }

    private static void test3(Vector<Integer> vector) {
        // 正常for方式
        for (int i=0; i<vector.size(); ++i) {
            if (vector.get(i).equals(3)) {
                vector.remove(i);
            }
        }
    }

    public static void main(String[] args) {

        Vector<Integer> vector = new Vector<>();
        vector.add(1);
        vector.add(2);
        vector.add(3);

//        test1(vector); // 抛出: ConcurrentModificationException 在遍历的同时进行了删除的操作，导致抛出了并发修改的异常
//        test2(vector); // 抛出: ConcurrentModificationException 在遍历的同时进行了删除的操作，导致抛出了并发修改的异常
        test3(vector); // 成功
    }
}
